package DataBase;

import Beans.Funcionario;
import Beans.Pessoa;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class FuncDAO extends DAO {

    public ArrayList<Funcionario> listarFuncionarios(String valor) throws Exception {

        Conectar();
        String SQL = "SELECT matricula,nome,cpf,usuario,endereco,tel1,tel2,nivel,status FROM funcionario f,pessoa p where (nome like '%" + valor + "%' or cpf_pessoa like '%" + valor + "%')"
                + " and ( p.cpf = f.cpf_pessoa and status='ativado') order by matricula";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Funcionario f = null;
        ArrayList<Funcionario> lista = new ArrayList<Funcionario>();
        while (rs.next()) {
            f = new Funcionario();
            f.setMatricula(rs.getInt("matricula"));
            f.setCpf(rs.getString("cpf"));
            f.setNome(rs.getString("nome"));
            f.setUsuario(rs.getString("usuario"));
            f.setEndereco(rs.getString("endereco"));
            f.setTel1(rs.getString("tel1"));
            f.setTel2(rs.getString("tel2"));
            f.setNivel(rs.getString("nivel"));
            f.setStatus(rs.getString("status"));
            lista.add(f);

        }
        Desconectar();
        return lista;



    }

    public ArrayList<Funcionario> listarFuncionarios() throws Exception {

        Conectar();
        String SQL = "SELECT matricula,nome,cpf,usuario,endereco,tel1,tel2,nivel,status FROM funcionario f,pessoa p where  "
                + " ( p.cpf = f.cpf_pessoa and status='ativado') order by matricula";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Funcionario f = null;
        ArrayList<Funcionario> lista = new ArrayList<Funcionario>();
        while (rs.next()) {
            f = new Funcionario();
            f.setMatricula(rs.getInt("matricula"));
            f.setCpf(rs.getString("cpf"));
            f.setNome(rs.getString("nome"));
            f.setUsuario(rs.getString("usuario"));
            f.setEndereco(rs.getString("endereco"));
            f.setTel1(rs.getString("tel1"));
            f.setTel2(rs.getString("tel2"));
            f.setNivel(rs.getString("nivel"));
            f.setStatus(rs.getString("status"));
            lista.add(f);

        }
        Desconectar();
        return lista;



    }

    public Funcionario pesquisa(String pesquisa) {
        try {
            Conectar();
            String SQL = "SELECT matricula,nome,cpf,usuario,endereco,tel1,tel2,nivel,status FROM funcionario f,pessoa p where (p.nome=? or p.cpf=? "
                    + ") and p.cpf = f.cpf_pessoa ";
            pstmt = con.prepareStatement(SQL);
            System.out.println(pesquisa);
            pstmt.setString(1, pesquisa);
            pstmt.setString(2, pesquisa);
            rs = pstmt.executeQuery();
            Funcionario f = null;

            if (rs.next()) {

                f = new Funcionario();
                f.setCpf(rs.getString("cpf"));
                f.setMatricula(rs.getInt("matricula"));
                f.setNome(rs.getString("nome"));
                f.setUsuario(rs.getString("usuario"));
                f.setEndereco(rs.getString("endereco"));
                f.setTel1(rs.getString("tel1"));
                f.setTel2(rs.getString("tel2"));
                f.setNivel(rs.getString("nivel"));
                f.setStatus(rs.getString("status"));
                Desconectar();
                return f;
            } else {
                System.out.println("sera ?");
                f = new Funcionario();
                f.setCpf("invalido");
                return f;

            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex);
            Funcionario f = new Funcionario();
            f.setCpf("invalido");
            return f;
        }
    }

    public boolean inserirFunc(Funcionario f) {
        try {
            Conectar();
            String  SQL = "insert into funcionario (cpf_pessoa,usuario,senha,nivel,status)values(?,?,?,?,?)";
            pstmt = con.prepareStatement(SQL);

            pstmt.setString(1, f.getCpf());
            pstmt.setString(2, f.getUsuario());
            pstmt.setString(3, f.getSenha());
            pstmt.setString(4, f.getNivel());
            pstmt.setString(5, f.getStatus());
            pstmt.executeUpdate();
            Desconectar();
            return true;
         
        } catch (SQLException sqlex) {
            System.out.println(sqlex);
            sqlex.printStackTrace();
            return false;
        }
        finally{
        Desconectar();
        }
    }

    public boolean alterarFuncionario(Funcionario f) {
        try {
            Conectar();
            String SQL = "update funcionario set usuario=?,nivel=?,status=? where cpf_pessoa=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, f.getUsuario());
            pstmt.setString(2, f.getNivel());
            pstmt.setString(3, f.getStatus());
            pstmt.setString(4, f.getCpf());
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (SQLException sqlex) {
            return false;
        }


    }

    public boolean removerFuncionario(String cpf) {
        try {
            Conectar();
            String SQL = "update funcionario set status='desativado' where cpf_pessoa=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, cpf);
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (SQLException sqlex) {
            return false;
        }
    }
    
 
    

    public boolean verificarFuncionario(String cpf) {
        try {
            Conectar();
            String SQL = "select*from pessoa p ,funcionario f where cpf_pessoa=? and p.cpf = f.cpf_pessoa";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, cpf);
            rs = pstmt.executeQuery();
            Desconectar();
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException sqlex) {
            JOptionPane.showMessageDialog(null, "Não Foi Possivel Verificar o Cpf \n "
                    + " Erro no Banco de Dados ");
            return false;

        }
    }

    public boolean logar(String login, String senha) {
        try {
            Conectar();
            String consulta = "SELECT usuario, senha FROM funcionario where usuario = ?";
            pstmt = con.prepareStatement(consulta);

            pstmt.setString(1, login);

            rs = pstmt.executeQuery();


            if (rs.next()) {
                if (rs.getString("senha").equals(senha)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } catch (SQLException ex) {
            System.out.println("Exceção" + ex);
            return false;
        }
    }
    
    public String obterNivelFuncionario(String login){
        try {
            Conectar();
            String consulta = "SELECT nivel FROM funcionario where usuario = ?";
            pstmt = con.prepareStatement(consulta);

            pstmt.setString(1, login);

            rs = pstmt.executeQuery();


            if (rs.next()) {
                return rs.getString("nivel");
            } else {
                return null;
            }
        } catch (SQLException ex) {
            System.out.println("Exceção" + ex);
            return null;
        }
    }
    public Funcionario consultarBdFunc(String cod) throws Exception {

        try {

            Conectar();
            String SQL = ("SELECT matricula,nome FROM pessoa p,funcionario f WHERE p.cpf = f.cpf_pessoa and matricula=?");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, (cod));
            rs = pstmt.executeQuery();


            System.out.println("consultou tabela produto é do metodo consultarBd PRODUTO");
            //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            Funcionario pd = null;
            if (rs.next()) {
                pd = new Funcionario();
                pd.setMatricula(rs.getInt("Matricula"));
                pd.setNome(rs.getString("nome"));


                System.out.println("dentro da Tabela produto");
            }


            Desconectar();
            return pd;//retorna o objeto que sera passado p/ botão consultar

        } catch (SQLException se) {
            return null;
        }
    }
}
